home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / ssozumo.c < prev    next >
C/C++ Source or Header  |  2000-05-04  |  4KB  |  169 lines

  1. /***************************************************************************
  2.  
  3. Syusse Oozumou
  4. (c) 1984 Technos Japan (Licensed by Data East)
  5.  
  6. Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/10/04
  7.  
  8. ***************************************************************************/
  9.  
  10. #include "driver.h"
  11. #include "vidhrdw/generic.h"
  12.  
  13. unsigned char *ssozumo_videoram2, *ssozumo_colorram2;
  14. size_t ssozumo_videoram2_size;
  15. unsigned char *ssozumo_scroll;
  16.  
  17. #define TOTAL_COLORS(gfxn)    (Machine->gfx[gfxn]->total_colors * Machine->gfx[gfxn]->color_granularity)
  18. #define COLOR(gfxn,offs)    (colortable[Machine->drv->gfxdecodeinfo[gfxn].color_codes_start + offs])
  19.  
  20. /**************************************************************************/
  21.  
  22. void ssozumo_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable, const unsigned char *color_prom)
  23. {
  24.     int    bit0, bit1, bit2, bit3;
  25.     int    i;
  26.  
  27.     for (i = 0 ; i < 64 ; i++)
  28.     {
  29.         bit0 = (color_prom[0] >> 0) & 0x01;
  30.         bit1 = (color_prom[0] >> 1) & 0x01;
  31.         bit2 = (color_prom[0] >> 2) & 0x01;
  32.         bit3 = (color_prom[0] >> 3) & 0x01;
  33.         *(palette++) = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  34.         bit0 = (color_prom[0] >> 4) & 0x01;
  35.         bit1 = (color_prom[0] >> 5) & 0x01;
  36.         bit2 = (color_prom[0] >> 6) & 0x01;
  37.         bit3 = (color_prom[0] >> 7) & 0x01;
  38.         *(palette++) = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  39.         bit0 = (color_prom[64] >> 0) & 0x01;
  40.         bit1 = (color_prom[64] >> 1) & 0x01;
  41.         bit2 = (color_prom[64] >> 2) & 0x01;
  42.         bit3 = (color_prom[64] >> 3) & 0x01;
  43.         *(palette++) = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  44.  
  45.         color_prom++;
  46.     }
  47. }
  48.  
  49.  
  50. WRITE_HANDLER( ssozumo_paletteram_w )
  51. {
  52.     int    bit0, bit1, bit2, bit3, val;
  53.     int    r, g, b;
  54.     int    offs2;
  55.  
  56.     paletteram[offset] = data;
  57.     offs2 = offset & 0x0f;
  58.  
  59.     val = paletteram[offs2];
  60.     bit0 = (val >> 0) & 0x01;
  61.     bit1 = (val >> 1) & 0x01;
  62.     bit2 = (val >> 2) & 0x01;
  63.     bit3 = (val >> 3) & 0x01;
  64.     r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  65.  
  66.     val = paletteram[offs2 | 0x10];
  67.     bit0 = (val >> 0) & 0x01;
  68.     bit1 = (val >> 1) & 0x01;
  69.     bit2 = (val >> 2) & 0x01;
  70.     bit3 = (val >> 3) & 0x01;
  71.     g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  72.  
  73.     val = paletteram[offs2 | 0x20];
  74.     bit0 = (val >> 0) & 0x01;
  75.     bit1 = (val >> 1) & 0x01;
  76.     bit2 = (val >> 2) & 0x01;
  77.     bit3 = (val >> 3) & 0x01;
  78.     b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  79.  
  80.     palette_change_color(offs2 + 64, r, g, b);
  81. }
  82.  
  83.  
  84. int ssozumo_vh_start(void)
  85. {
  86.     if ((dirtybuffer = malloc(videoram_size)) == 0)
  87.     {
  88.         return 1;
  89.     }
  90.     memset(dirtybuffer, 1, videoram_size);
  91.  
  92.     if ((tmpbitmap = osd_create_bitmap(Machine->drv->screen_width, 2 * Machine->drv->screen_height)) == 0)
  93.     {
  94.         free(dirtybuffer);
  95.         return 1;
  96.     }
  97.  
  98.     return 0;
  99. }
  100.  
  101.  
  102. void ssozumo_vh_stop(void)
  103. {
  104.     free(dirtybuffer);
  105.     osd_free_bitmap(tmpbitmap);
  106. }
  107.  
  108.  
  109. void ssozumo_vh_screenrefresh(struct osd_bitmap *bitmap, int full_refresh)
  110. {
  111.     int    offs;
  112.     int    sx, sy;
  113.     int    scrolly;
  114.  
  115.  
  116.     if (palette_recalc())
  117.         memset(dirtybuffer,1,videoram_size);
  118.  
  119.     /* Draw the background layer*/
  120.     for (offs = (videoram_size - 1) ; offs >= 0 ; offs--)
  121.     {
  122.         if (dirtybuffer[offs])
  123.         {
  124.             dirtybuffer[offs] = 0;
  125.  
  126.             sx = (15 - offs / 32);
  127.             sy = (offs % 32);
  128.  
  129.             drawgfx(tmpbitmap, Machine->gfx[1],
  130.                     videoram[offs] + ((colorram[offs] & 0x08) << 5),
  131.                     (colorram[offs] & 0x30) >> 4,
  132.                     0, sy >= 16,
  133.                     (16 * sx), (16 * sy),
  134.                     0, TRANSPARENCY_NONE, 0);
  135.         }
  136.     }
  137.  
  138.     /* Draw the front layer */
  139.     scrolly = -*ssozumo_scroll;
  140.     copyscrollbitmap(bitmap, tmpbitmap, 0, 0, 1, &scrolly, &Machine->drv->visible_area, TRANSPARENCY_NONE, 0);
  141.  
  142.     for (offs = (ssozumo_videoram2_size - 1) ; offs >= 0 ; offs--)
  143.     {
  144.         sx = (31 - offs / 32);
  145.         sy = (offs % 32);
  146.  
  147.         drawgfx(bitmap,Machine->gfx[0],
  148.                 ssozumo_videoram2[offs] + 256 * (ssozumo_colorram2[offs] & 0x07),
  149.                 (ssozumo_colorram2[offs] & 0x30) >> 4,
  150.                 0, 0,
  151.                 (8 * sx), (8 * sy),
  152.                 &Machine->drv->visible_area, TRANSPARENCY_PEN, 0);
  153.     }
  154.  
  155.     /* Draw the sprites layer */
  156.     for (offs = 0 ; offs < spriteram_size ; offs += 4)
  157.     {
  158.         if (spriteram[offs] & 0x01)
  159.         {
  160.             drawgfx(bitmap, Machine->gfx[2],
  161.                     spriteram[offs+1] + ((spriteram[offs] & 0xf0) << 4),
  162.                     (spriteram[offs] & 0x08) >> 3,
  163.                     spriteram[offs] & 0x04,spriteram[offs] & 0x02,
  164.                     239 - spriteram[offs+3], (240 - spriteram[offs+2]) & 0xff,
  165.                     &Machine->drv->visible_area, TRANSPARENCY_PEN, 0);
  166.         }
  167.     }
  168. }
  169.